home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Acorn RISC PD-CD 1
/
Acorn RISC PD-CD 1.iso
/
languages
/
dde
/
_pc
/
h
/
bbc
< prev
next >
Wrap
Text File
|
1992-04-30
|
14KB
|
545 lines
(*
* Title : bbc.h
* Purpose: provides bbc-style graphics and mouse/keyboard control.
*
*)
# ifndef __bbc_h
# define __bbc_h
# ifndef __os_h
# include "os.h"
# endif
(* ----------------------- Text output functions --------------------------
* Decsription: The following functions provide BBC-style text output
* functions. For brevity only a short description is
* given per function.
* NOTE: these functions are retained to allow "old-style"
* operations. You should preferably use SWI calls via
* kernel.h in the C library.
*)
(* VDU commands. *)
const bbc_CharToPrinter = 1;
bbc_EnablePrinter = 2;
bbc_DisablePrinter = 3;
bbc_TextToText = 4;
bbc_TextToGraph = 5;
bbc_EnableVDU = 6;
bbc_Bell = 7;
bbc_MoveOneBack = 8;
bbc_MoveOneOn = 9;
bbc_MoveDownOne = 10;
bbc_MoveUpOne = 11;
bbc_ClearText = 12;
bbc_MoveToStart = 13;
bbc_PageOn = 14;
bbc_PageOff = 15;
bbc_ClearGraph = 16;
bbc_DefTextColour = 17;
bbc_DefGraphColour = 18;
bbc_DefLogical = 19;
bbc_RestoreLogical = 20;
bbc_DisableVDU = 21;
bbc_ScreenMode = 22;
bbc_MultiPurpose = 23;
bbc_DefGraphWindow = 24;
bbc_PlotCommand = 25;
bbc_DefaultWindow = 26;
bbc_DefTextWindow = 28;
bbc_DefGraphOrigin = 29;
bbc_HomeText = 30;
bbc_MoveText = 31;
(* ------------ bbc_vdu ------------
* output single character.
*
*)
procedure bbc_vdu(c : integer) : error; extern;
(* ------------ bbc_vduw -----------
* output double character.
*
*)
procedure bbc_vduw(w : integer) : error; extern;
(* ------------ bbc_vduq -----------
* output multiple characters. ctl is a
* control charcter, number of further
* parameters is appropriate to ctl
*(vduq knows how many to expect, and
* assumes correct params passed.
*)
procedure bbc_vduq(ctl : integer; ..) : error; extern;
(* -------- bbc_stringprint --------
* display null-terminated string.
*
*)
procedure bbc_stringprint(s : string) : error; extern;
(* ------------ bbc_cls ------------
* clear text window.
*
*)
procedure bbc_cls : error; extern;
(* ---------- bbc_colour -----------
* set text colour.
*
*)
procedure bbc_colour(c : integer) : error; extern;
(* ------------ bbc_pos ------------
* returns X coordinate of
* text cursor.
*
*)
function bbc_pos : integer; extern;
(* ------------ bbc_vpos -----------
* return Y coordinate of
* text cursor.
*
*)
function bbc_vpos : integer; extern;
(* ------------ bbc_tab ------------
* position text cursor at
* given coordinates.
*
*)
procedure bbc_tab(i, j : integer) : error; extern;
(* ----------------------- Graphics output functions -------------------- *)
(* Plot codes to be used with the bbc_plot function. *)
const bbc_SolidBoth = $00;
bbc_SolidExFinal = $08;
bbc_DottedBoth = $10;
bbc_DottedExFinal = $18;
bbc_SolidExInit = $20;
bbc_SolidExBoth = $28;
bbc_DottedExInit = $30;
bbc_DottedExBoth = $38;
#define bbc_Point $40 (* Clashes with bbc_point *)
bbc_HorizLineFillNB = $48;
bbc_TriangleFill = $50;
bbc_HorizLineFillB = $58;
#define bbc_RectangleFill $60 (* Clashes with bbc_rectanglefill *)
bbc_HorizLineFillF = $68;
bbc_ParallelFill = $70;
bbc_HorizLineFillNF = $78;
bbc_FloodToBack = $80;
bbc_FloodToFore = $88;
#define bbc_Circle $90 (* Clashes with bbc_circle *)
#define bbc_CircleFill $98 (* Clashes with bbc_circlefill *)
bbc_CircleArc = $A0;
bbc_Segment = $A8;
bbc_Sector = $B0;
bbc_Block = $B8;
bbc_Ellipse = $C0;
bbc_EllipseFill = $C8;
bbc_GraphicsChar = $D0;
bbc_SpritePlot = $E8;
(* Within each block of eight the offset from the base number has the
following meaning : *)
bbc_MoveCursorRel = 0;
bbc_DrawRelFore = 1;
bbc_DrawRelInverse = 2;
bbc_DrawRelBack = 3;
bbc_MoveCursorAbs = 4;
bbc_DrawAbsFore = 5;
bbc_DrawAbsInverse = 6;
bbc_DrawAbsBack = 7;
(* The above applies except for bbc_Block where the codes are as follows : *)
bbc_BMoveRel = 0;
bbc_BMoveRectRel = 1;
bbc_BCopyRectRel = 2;
bbc_BMoveAbs = 4;
bbc_BMoveRectAbs = 5;
bbc_BCopyRectAbs = 6;
(* ------------- bbc_plot -------------
* do a given plot operation.
*
*)
procedure bbc_plot(plotnumber, x, y : integer) : error; extern;
(* ------------- bbc_mode -------------
* set the screen mode.
*
*)
procedure bbc_mode(m : integer) : error; extern;
(* ------------- bbc_move -------------
* move graphics cursor to given
* absolute coordinates.
*
*)
procedure bbc_move(x, y : integer) : error; extern;
(* ------------ bbc_moveby ------------
* move graphics cursor to position
* relative to its current text cursor
* position.
*)
procedure bbc_moveby(dx, dy : integer) : error; extern;
(* ------------- bbc_draw -------------
* draw a line to given absolute
* coordinates.
*
*)
procedure bbc_draw(x, y : integer) : error; extern;
(* ------------ bbc_drawby ------------
* draw a line to position relative to
* current graphics cursor.
*
*)
procedure bbc_drawby(dx, dy : integer) : error; extern;
(* --------- bbc_rectangle ------------
* plot a rectangle, given:
* LeftX, BottomY, Width, Height.
*
*)
procedure bbc_rectangle(leftx, bottomy,
width, height : integer) : error; extern;
(* -------- bbc_rectanglefill ---------
* plot a solid rectangle, given:
* LeftX, BottmY, Width, Height.
*
*)
procedure bbc_rectanglefill(leftx, bottomy,
width, height : integer) : error; extern;
(* ------------ bbc_circle ------------
* draw a circle, given:
* Xcoord, Ycoord, Radius.
*
*)
procedure bbc_circle(x, y, r : integer) : error; extern;
(* ---------- bbc_circlefill ----------
* draw a solid circle, given:
* Xcoord, Ycoord, Radius.
*
*)
procedure bbc_circlefill(x, y, r : integer) : error; extern;
(* ------------ bbc_origin ------------
* move graphics origin to given absolute
* coordinates.
*
*)
procedure bbc_origin(x, y : integer) : error; extern;
(* ------------ bbc_gwindow -----------
* set up graphics window, given:
* BottomLeftX, BottomLeftY,
* TopRightX, TopRightY.
*)
procedure bbc_gwindow(bottomleftx, bottomlefty,
toprightx, toprighty : integer) : error; extern;
(* ------------- bbc_clg -------------
* clear graphics window.
*
*)
procedure bbc_clg : error; extern;
(* ------------ bbc_fill -------------
* flood-fill area X,Y
* fills from X,Y til either non_background
* colour or edge of screen.
*
*)
procedure bbc_fill(x, y : integer) : error; extern;
(* ------------- bbc_gcol ------------
* set graphics colour to given value.
*
*)
procedure bbc_gcol(action, colour : integer) : error; extern;
(* ------------- bbc_tint ------------
* Set grey level of a colour: use tint 0-3, as it gets shifted for you.
*
*)
procedure bbc_tint(_type, value : integer) : error; extern;
(* ------------- bbc_palette ---------
* Physical to logical colour definition.
* Logical colour, Physical colour,
* Red level, Green level, Blue level.
*
*)
procedure bbc_palette(l, p, r, g, b : integer) : error; extern;
(* ------------- bbc_point -----------
* Find the logical colour of a pixel at
* indicated coordinates. x, y.
*
*)
function bbc_point(x, y : integer) : integer; extern;
(* ------------------------- VDU and Mode Variables. --------------------- *)
(* VDU variables. *)
const
bbc_GWLCol = 128; (* graphics window (ic) *)
bbc_GWBRow = 129; (* (left, bottom, right, top) *)
bbc_GWRCol = 130;
bbc_GWTRow = 131;
bbc_TWLCol = 132; (* text window *)
bbc_TWBRow = 133; (* (left, bottom, right, top) *)
bbc_TWRCol = 134;
bbc_TWTRow = 135;
bbc_OrgX = 136; (* graphics origin (ec) *)
bbc_OrgY = 137;
bbc_GCsX = 138; (* graphics cursor (ec) *)
bbc_GCsY = 139;
bbc_OlderCsX = 140; (* oldest graphics cursor (ic) *)
bbc_OlderCsY = 141;
bbc_OldCsX = 142; (* previous graphics cursor (ic) *)
bbc_OldCsY = 143;
bbc_GCsIX = 144; (* graphics cursor (ic) *)
bbc_GCsIY = 145;
bbc_NewPtX = 146; (* new point (ic) *)
bbc_NewPtY = 147;
bbc_ScreenStart = 148; (* start of screen memory *)
bbc_DisplayStart = 149; (* start of display screen memory *)
bbc_TotalScreenSize = 150; (* size of configured screen memory *)
bbc_GPLFMD = 151; (* GCOL action for foreground colour *)
bbc_CPLBMD = 152; (* GCOL action for background colour *)
bbc_GFCOL = 153; (* foreground/background colours *)
bbc_GBCOL = 154;
bbc_TForeCol = 155; (* text foreground/background colours *)
bbc_TBackCol = 156;
bbc_GFTint = 157; (* graphics tints *)
bbc_GBTint = 158;
bbc_TFTint = 159; (* text tints *)
bbc_TBTint = 160;
bbc_MaxMode = 161; (* highest mode number available *)
bbc_GCharSizeX = 162; (* size of VDU-5 system font in pixels *)
bbc_GCharSizeY = 163;
bbc_GCharSpaceX = 164; (* spacing of VDU-5 system font *)
bbc_GCharSpaceY = 165;
bbc_HLineAddr = 166;
bbc_TCharSizeX = 167; (* text chars (in pixels) *)
bbc_TCharSizeY = 168;
bbc_TCharSpaceX = 169;
bbc_TCharSpaceY = 170;
type bbc_vduvariable_ptr = ^bbc_vduvariable;
bbc_vduvariable = integer;
const
bbc_ModeFlags = 0; (* bit0->non-graphic,
bit1->teletext,
bit2->gap *)
bbc_ScrRCol = 1; (* max text col number *)
bbc_ScrBCol = 2; (* max text row number *)
bbc_NColour = 3; (* max logical colour: 1, 3, 15 or 63 *)
bbc_XEigFactor = 4; (* OS-unit->pixel shift factor.
0 -> OS-units = pixels,
1 -> 2 OS-units per pixel,
2 -> 4 OS-units per pixel, etc. *)
bbc_YEigFactor = 5;
bbc_LineLength = 6; (* bytes per pixel row. *)
bbc_ScreenSize = 7; (* bytes per screen. *)
bbc_YShftFactor = 8; (* DEPRECATED; Log(2) of LineLength/5. *)
bbc_Log2BPP = 9; (* log base 2 of bits per pixel. *)
bbc_Log2BPC = 10; (* log base 2 of bytes per character. *)
bbc_XWindLimit = 11; (* pixels across - 1 *)
bbc_YWindLimit = 12; (* pixels up - 1 *)
type bbc_modevariable_ptr = ^bbc_modevariable;
bbc_modevariable = integer;
(* ------------- bbc_vduvar ---------
* Read a single VDU or mode variable
* value, for the current screen mode
*
*)
function bbc_vduvar(varno : integer) : integer; extern;
(* ------------- bbc_vduvars --------
* read several VDU or mode variable
* values. vars points to a sequence
* of ints, terminated by -1. Each is
* a VDU or mode variable number, and the
* corresponding values will be
* replaced by the value of that variable
*
*)
procedure bbc_vduvars(vars : bbc_vduvariable_ptr;
values : pointer) : error; extern;
(* ------------- bbc_modevar -------
* Read a single mode variable, for the
* given screen mode.
*
*)
function bbc_modevar(mode, varno : integer) : integer; extern;
(* ------------------------------- Other calls. -------------------------- *)
(* ------------- bbc_get ---------
* Return a character from the input
* stream. $1xx is returned if an
* escape condition exists
*
*)
function bbc_get : integer; extern;
(* ------------- bbc_cursor ---------
* Alter cursor appearance. Argument
* takes values 0 to 3
*
*)
procedure bbc_cursor(n : integer) : error; extern;
(* ------------- bbc_adval ---------
* Read data from analogue ports or
* give buffer data.
*
*)
function bbc_adval(x : integer) : integer; extern;
(* ----------- bbc_getbeat -------
* Return current beat value
*
*)
function bbc_getbeat : integer; extern;
(* ----------- bbc_getbeats ------
* read beat counter cycle length
*
*)
function bbc_getbeats : integer; extern;
(* ---------- bbc_gettempo ------
* read rate at which beat counter
* counts
*
*)
function bbc_gettempo : integer; extern;
(* ---------- bbc_inkey ---------
* Return character code from an
* input stream or the keyboard
*
*)
function bbc_inkey(n : integer) : integer; extern;
(* ---------- bbc_setbeats ------
* Set beat counter cycle length
*
*)
procedure bbc_setbeats(l : integer) : error; extern;
(* ------------ bbc_settempo ---
* Set rate at which beat counter
* counts
*
*)
procedure bbc_settempo(newtempo : integer) : error; extern;
(* ----------- bbc_sound --------
* Make or schedule a sound.
* Params: Channel, Amplitude,
* Pitch, Duration, Future Time
*
*)
procedure bbc_sound(chan, amp,
pitch, dur, futime : integer) : error; extern;
(* ------------ bbc_soundoff ----
* Deactivate sound system
*
*)
procedure bbc_soundoff : error; extern;
(* ----------- bbc_soundon -------
* Activate sound system
*
*)
procedure bbc_soundon : error; extern;
(* ------------ bbc_stereo -------
* Set stereo position for specified
* channel. Params: Channel, Position
*
*)
procedure bbc_stereo(channel, position : integer) : error; extern;
(* ----------- bbc_voices --------
* Set number of sound channels
* 1, 2, 4 or 8.
*
*)
procedure bbc_voices(channels : integer) : error; extern;
#endif
(* end of bbc.h *)